#ifndef SEGMENT_CODES_H
#define SEGMENT_CODES_H

#include <stdint.h>
#include <stdbool.h>

typedef enum{
    LCD_DIS_AM,
    LCD_DIS_PM,
    LCD_DIS_ALARM1,
    LCD_DIS_ALARM2,
    LCD_DIS_WEEKDAY,
    LCD_DIS_HOURGLASS,
    LCD_DIS_TIMER,
    LCD_DIS_SLEEP,
    LCD_DIS_BATTERY,
    LCD_DIS_CUBE,
    LCD_DIS_ERROR,
    LCD_DIS_CHARGE
} LCD_Display_ID;

typedef struct
{
    uint8_t data_len;
    uint8_t seg_data[2];
    char name[10];
} HourHigh_STRUCT;

typedef struct
{
    uint8_t data_len;
    uint8_t seg_data[14];
    char name[10];
} LCD_Display_8_STRUCT;

// 小时高位显示段码
extern HourHigh_STRUCT HourHighTable[];
// 小时低位显示段码
extern LCD_Display_8_STRUCT LCD_Display_8Table[];
extern LCD_Display_8_STRUCT MinuteHighTable[];
// 分钟低位显示段码
extern LCD_Display_8_STRUCT MinuteLowTable[];

// 段码定义（SEG编号对应HT1621B的SEG引脚）
// 星期显示段码
#define SEG_SUN 1 // 星期日 
#define SEG_SAT 2// 星期六 
#define SEG_FRI 3 // 星期五 
#define SEG_THU 9 // 星期四 
#define SEG_TUE 10 // 星期二
#define SEG_MON 11// 星期一 
#define SEG_WED 17 // 星期三

// 功能指示段码
#define SEG_USB 33      // USB连接指示 
#define SEG_DATE 225     // "DATE"字符显示 
#define SEG_ALARM1 234   // 闹钟1指示 
#define SEG_ALARM2 233    // 闹钟2指示 
#define SEG_COUNT_DOWN 241 // 倒计时符号 
#define SEG_TIMER 193     // 定时器指示 
#define SEG_SLEEP 74    // 睡眠模式指示 
#define SEG_BATTERY 194  // 电池电量图标 
#define SEG_CUBE 41

#define SEG_AM 242
#define SEG_PM 243

// 段码控制函数声明
void segment_set(uint8_t segment, uint8_t state);
bool segment_get(uint8_t seg_number);
void segment_clear_all(void);
void segment_display_number(uint8_t position, uint8_t number);
void segment_display_weekday(uint8_t weekday);
void segment_display_function_indicator(uint8_t indicator,bool enable);

// 显示时间（格式 HH:MM 或 HH:MM:SS）
void segment_display_RTC_time_blink(uint8_t hours, uint8_t minutes, uint8_t seconds , bool h_blink, bool m_blink, bool s_blink);
void segment_display_RTC_time(uint8_t hours, uint8_t minutes, uint8_t seconds, bool colon_visible);
// 显示日期（格式 MM-DD 或 MM-DD-WD）
void segment_display_date(uint8_t month, uint8_t day, uint8_t weekday);
void segment_display_year(uint8_t year);
void segment_display_charge_status(void);
#endif // SEGMENT_CODES_H
